//store的counter.ts文件导入pinia
import { defineStore } from "pinia";
import { reqlogin, getaslideInfo } from "../api";
import type { ApiResponse, LoginResponseData, MenuItem ,MenuResponse} from "../api/type";
import router from "../router";
//创建pinia的实例
export const useCounterStore = defineStore("counter", {
  //state特殊的 箭头函数
  state: () => ({
    token: localStorage.getItem("TOKEN"),
    menuList: [],
    isCollapse: false,
  }),
  getters: {}, //可以在插值表达式使用,counter.doubleCount
  actions: {
    async userLogin(data) {
      //data来接收存在loginForm的数据
      //请求登录接口来接收数据
      const result: ApiResponse<LoginResponseData> = await reqlogin(data);
      //判断是否登录成功 ，成功返回编码200，失败是201
      if (result.code === "0000") {
        //pinia存储token
        this.token = result.data; // result.data 就是 token 字符串
        //本地持久化,页面刷新时候数据还在
        localStorage.setItem("TOKEN", result.data);
        //返回一个成功的promise对象
        return "ok";
      } else {
        return Promise.reject(new Error(result.msg)); // error 是 Error 实例，含有 message
      }
    },
    //修改state的数据，一般用于事件
    //登陆成功跳转首页，调用菜单接口，渲染动态菜单
    async fetchMenu(name: string) {
      //请求菜单接口，拿到数据里面的data
      const menu:MenuResponse = await getaslideInfo(name);
      //存储在pinia的menuList里
      this.menuList = menu.data
       const menuArr: any = [];
      console.log( "菜单是",this.menuList);
      
      this.menuList.forEach((item) => {
        //子菜单
        if (Array.isArray(item.children) && item.children.length > 0) {
          item.children = item.children.map((item2) => {
            item2.component = () => import(`../view/${item2.url}.vue`);
           return item
          });
           menuArr.push(...item.children);
        } else {
          //没有子菜单
            item.component = () => import(`../view/${item.url}.vue`);
            menuArr.push(item);

        }
      });
      console.log("新菜单是",menuArr);
      //动态添加
      menuArr.forEach((item)=>{
        router.addRoute('layout',item)
      })
    },
    foldMenu() {
      //折叠的模式取反
      this.isCollapse = !this.isCollapse;
    },
    //遍历菜单数据拿到路由
    addMenu() {
     
    },
  },
  persist: true  // ✅ 开启持久化),
});
